# 2024.06.19——比特Python代码案例
# 人生重开模拟器——简化版
# 实现功能：
# 1. 初识属性设定——颜值、体质、智力、家境
# 2. 开始游戏——随机生成性别和出生点
# 3. 针对每一年，都生成人生的经历~~（依靠一定的随机因素 + 当前角色的属性）

# 导入模块
import random
import sys
import time
# if sys.stdin.isatty():
#     sys.stdin = open('/dev/tty')
# 第一步：欢迎界面的打印
print("+--------------------------+")
print('|                          |')
print('|  花无重开日,人无再少年   |')
print('|                          |')
print('|  欢迎进入人生重开模拟器  |')
print('|                          |')
print("+--------------------------+")

# 第二步：初始属性
# 颜值、体质、家境、智力
# 总和不能超过20，每一项取值在1~10之间
print("请设置初始属性：")
begin = 20
while True:
    face = int(input("请输入颜值初始值<1~10>："))
    body = int(input("请输入体质初始值<1~10>："))
    home = int(input("请输入家境初始值<1~10>："))
    iq = int(input("请输入智商初始值<1~10>："))
    # 判断输入的合法性
    if face < 1 or face > 10:
        print("颜值初始值输入有误，请重新输入！！！")
        continue
    if body < 1 or body > 10:
        print("体质初始值输入有误，请重新输入！！！")
        continue
    if home < 1 or home > 10:
        print("家境初始值输入有误，请重新输入！！！")
        continue
    if iq < 1 or iq > 10:
        print("智商初始值输入有误，请重新输入！！！")
        continue
    Sum = face + body + home + iq
    if Sum > begin:
        print("初始属性设置超过了限定值20，请重新设置初始属性！！！")
        continue
    if Sum < begin:
        print(f"您目前还有可分配点数{begin - Sum}未被分配，是否继续游戏？")
        print("1.继续游戏 2.重新设置")
        tmp = 3
        while True:
            tmp = int(input("请输入您的选择<1, 2>："))
            if tmp != 1 and tmp != 2:
                print("输入有误，请重新输入！！！")
            else:
                break
        if tmp == 1:
            pass
        else:
            continue
    print("现已完成初始属性设置，您目前的初始属性为：")
    print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
    break
# 获取随机值来确定性别
sex = random.randint(0, 1)  # random.是Python中的一个模块
# 在Python中如果需要使用其它模块，我们需要通过import将对应的模块给导入进来
# randint是一个前闭后闭的随机整数区间
if sex == 0:
    print("你的性别：女")
else:
    print("你的性别：男")
# 角色出生点设定——由家境决定
# 第一档：home == 10，带来一些属性加成
# 第二档：7 <= home <= 9，带来属性加成
# 第三档：4 <= home <= 6，带来少量的属性加成
# 第四档：1 <= home <= 3, 扣除部分属性
# 通过随机数来决定出生点的具体情况
place = random.randint(1, 3)
if home == 10:  # 第一档：出生在世家
    if place == 1:
        print("你出生在军人世家")
        home += 2
        body += 3
        iq += 2
        face += 2
    elif place == 2:
        print({"你出生在书香世家"})
        home += 2
        iq += 3
        face += 2
        body += 2
    else:
        print("你出生在商人世家")
        home += 3
        body += 2
        iq += 2
        face += 2
elif 7 <= home <= 9:    # 第二档：出生在大城市
    if place == 1:
        print("你出生在大城市，父母是公务员")
        home += 1
        body += 2
        iq += 1
        face += 1
    elif place == 2:
        print({"你出生在大城市，父母是大学教授"})
        home += 1
        iq += 2
        face += 1
        body += 1
    else:
        print("你出生在大城市，父母是商人")
        home += 2
        body += 1
        iq += 1
        face += 1
elif 4 <= home <= 6:    # 第三档：出生在城市
    if place == 1:
        print("你出生在城市，父母是上班族")
        body += 1
    elif place == 2:
        print({"你出生在城市，父母是学校老师"})
        iq += 1
    else:
        print("你出生在城市，父母做点小生意")
        home += 1
elif 1 <= home <= 3:    # 第四档：出生在农村、县城
    if place == 1:
        print("你出生在农村，父母是农民")
        body += 1
        iq -= 1
        face -= 1
        home -= 1
    elif place == 2:
        print({"你出生在县城，父母是文化程度不高"})
        home -= 1
        iq -= 1
        face -= 1
        body -= 1
    else:
        print("你出生在县城，父母是感情不和")
        home -= 2
        body -= 1
        iq -= 1
        face -= 1
print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
# 实现一个游戏的时候，很多时候游戏本身涉及到的逻辑并不复杂
# 但是游戏中的一些具体数据、数值的平衡是非常复杂的

# 生成角色的人生经历
# 第一阶段：1~10岁——可塑性强
# 第二阶段：11~20——求学阶段
# 第三阶段：20~50——平稳阶段
# 第四阶段：>50——老年阶段：颜值和体质和智力显著退化

# 幼年阶段——通过循环来生成每年的随机事件
# 根据角色的性别、年龄、各种属性来触发各种事件，随机数会对事件的结果产生影响
# 这些事件会对属性带来变更
# 每年执行结束，都需要打印这一年发生的事件（每年只发生一件大事）
# 也可能遇到夭折的情况，通过exit函数来结束程序
# sys.是Python内部提供的一个模块，需要通过import引入sys
# time也是Python提供的一个模块，需要通过import引入time
print("你进入了幼年阶段")
print("-----------------------------------------------------")
event = random.randint(1, 3)
for age in range(1, 11):
    info = f"你今年{age}岁了，"
    # 由性别触发极端事件
    if sex == 0 and home <= 2 and event == 1:
        info += "由于父母有严重的重男轻女的思想，你被遗弃了,游戏结束"
        print(info)
        print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
        sys.exit(0)
    # 由体质触发的极端事件
    elif body <= 4 and age <= 8:
        info += "你的体质太弱，生了一场大病，"
        if home >= 7:
            info += "由于家庭条件优越，父母将你送到了医院使你痊愈了"
            body += 1
            home -= 1
        elif 3 <= home <= 6:
            info += "父母及时将你送到了医院，但是由于工作繁忙忽视了对你的看护，给你留下了后遗症"
            body -= 1
            home -= 1
        elif home <= 2 and event >= 2:
            info += "父母贪便宜将你送到了小诊所，由于医生乱开药，你的病情更严重了"
            body -= 2
            home -= 1
        else:
            info += "家里没钱负担医疗费，父母让你自生自灭"
            body -= 3
            home += 1
    # 由颜值触发的极端事件
    elif face <= 3 and age >= 6:
        info += "你的颜值太低，容易受到别人的贬低，"
        if home >= 7:
            info += "由于家庭条件优越，父母找人精心照料，你的颜值得到了提升"
            face += 1
            home -= 1
        elif 3 <= home <= 6 and event >= 2:
            info += "父母经常开导你，让你并未受到影响"
        elif 3 <= home <= 6 and event == 1:
            info += "父母对你的事情不管不顾，你的心理受到了打击"
            body -= 1
            if body == 0:
                print(info)
                print("你由于想不开，寻了短见")
                print("游戏结束！")
                print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
                sys.exit(0)
        elif home <= 2 <= event:
            info += "父母教你下次直接打回去，所以你之后经常与人打架"
            body += 1
            face -= 1
            iq -= 1
        else:
            info += "父母也经常性的嫌弃你，你的自尊心受到了伤害"
            body -= 1
            iq -= 1
            if body == 0:
                print(info)
                print("你由于想不开，寻了短见")
                print("游戏结束！")
                print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
                sys.exit(0)
    # 由智商触发的极端事件
    elif iq <= 3 and age >= 4:
        info += "你看起来傻傻的，"
        if home >= 7 and event == 1:
            info += "父母平时会花费更多的时间在你的学习上，你的学识增加了"
            iq += 1
            home -= 1
        elif home >=7 and event == 2:
            info += "父母把你送进了辅导班，经过你的努力学习，你学会了跟多的知识"
            iq += 2
            home -= 1
        elif home >= 7 and event == 3:
            info += "父母为你请了私人教师一对一的带你学习，你变聪明了"
            iq += 3
            home -= 2
        elif home < 7 and age <= 6:
            info += "学校老师经常批评你，你的自尊受到了打击，但是父母认为是你还未发育好，并未过多干预"
            home += 1
            body -= 1
            if 1 <= body <= 2:
                info += "，你患上了抑郁症"
            elif body == 0:
                print(info)
                print("你由于想不开，最终选择了结束痛苦的一生")
                print("游戏结束")
                print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
                sys.exit(0)
        else:
            info += "父母开始着急了，把你送进了补习班，你开始学会了新知识"
            iq += 1
            home -= 1
    # 健康成长
    else:
        info += "今年无事发生，你健康的成长"
        iq += 1
        home += 1
        face += 1
        body += 1
    print(info)
    print(f"颜值：{face}、 体质：{body}、 家境：{home}、 智商：{iq}")
    time.sleep(1)  # 这里的1代表的是1秒不是1ms
    print("-----------------------------------------------------")
print("游戏结束，1min后关闭窗口")
time.sleep(60)   # 这里的1代表的是1秒不是1ms

# 生成可执行程序步骤
# 1. 安装pyinstaller——指令：pip install pyinstaller
# 2. 生成.exe文件——指令：pyinstaller -F 需要生成的文件名.py

# 命令参数介绍
# -F —— 表示生成单个可执行文件
# -w —— 表示去掉控制台窗口，这在GUI界面非常有用。不过是命令行程序的话就不能使用这个参数
# -p —— 表示你自己定义到需要加载的类路径，一般情况下用不着
# -i —— 表示可执行文件的图标

# 生成的可执行文件在dist文件夹中


